package javo

/* Classfile version number for this information */
const (
	JVM_CLASSFILE_MAJOR_VERSION = 53
	JVM_CLASSFILE_MINOR_VERSION = 0
)

const (
	CONSTANT_Class              = 7
	CONSTANT_Fieldref           = 9
	CONSTANT_Methodref          = 10
	CONSTANT_InterfaceMethodref = 11
	CONSTANT_String             = 8
	CONSTANT_Integer            = 3
	CONSTANT_Float              = 4
	CONSTANT_Long               = 5
	CONSTANT_Double             = 6
	CONSTANT_NameAndType        = 12
	CONSTANT_Utf8               = 1
	CONSTANT_MethodHandle       = 15
	CONSTANT_MethodType         = 16
	CONSTANT_InvokeDynamic      = 18
)

/* Flags */

const (
	JVM_ACC_PUBLIC       = 0x0001
	JVM_ACC_PRIVATE      = 0x0002
	JVM_ACC_PROTECTED    = 0x0004
	JVM_ACC_STATIC       = 0x0008
	JVM_ACC_FINAL        = 0x0010
	JVM_ACC_SYNCHRONIZED = 0x0020
	JVM_ACC_SUPER        = 0x0020
	JVM_ACC_VOLATILE     = 0x0040
	JVM_ACC_BRIDGE       = 0x0040
	JVM_ACC_TRANSIENT    = 0x0080
	JVM_ACC_VARARGS      = 0x0080
	JVM_ACC_NATIVE       = 0x0100
	JVM_ACC_INTERFACE    = 0x0200
	JVM_ACC_ABSTRACT     = 0x0400
	JVM_ACC_STRICT       = 0x0800
	JVM_ACC_SYNTHETIC    = 0x1000
	JVM_ACC_ANNOTATION   = 0x2000
	JVM_ACC_ENUM         = 0x4000
)

const (
	METHOD_ACC_PUBLIC       = JVM_ACC_PUBLIC
	METHOD_ACC_PRIVATE      = JVM_ACC_PRIVATE
	METHOD_ACC_PROTECTED    = JVM_ACC_PROTECTED
	METHOD_ACC_STATIC       = JVM_ACC_STATIC
	METHOD_ACC_FINAL        = JVM_ACC_FINAL
	METHOD_ACC_SYNCHRONIZED = JVM_ACC_SYNCHRONIZED
	METHOD_ACC_BRIDGE       = JVM_ACC_BRIDGE
	METHOD_ACC_VARARGS      = JVM_ACC_VARARGS
	METHOD_ACC_NATIVE       = JVM_ACC_NATIVE
	METHOD_ACC_ABSTRACT     = JVM_ACC_ABSTRACT
	METHOD_ACC_STRICT       = JVM_ACC_STRICT
	METHOD_ACC_SYNTHETIC    = JVM_ACC_SYNTHETIC
)

const (
	FIELD_ACC_PUBLIC    = JVM_ACC_PUBLIC
	FIELD_ACC_PRIVATE   = JVM_ACC_PRIVATE
	FIELD_ACC_PROTECTED = JVM_ACC_PROTECTED
	FIELD_ACC_STATIC    = JVM_ACC_STATIC
	FIELD_ACC_FINAL     = JVM_ACC_FINAL
	FIELD_ACC_VOLATILE  = JVM_ACC_VOLATILE
	FIELD_ACC_TRANSIENT = JVM_ACC_TRANSIENT
	FIELD_ACC_SYNTHETIC = JVM_ACC_SYNTHETIC
	FIELD_ACC_ENUM      = JVM_ACC_ENUM
)

const (
	CLASS_ACC_PUBLIC     = JVM_ACC_PUBLIC
	CLASS_ACC_FINAL      = JVM_ACC_FINAL
	CLASS_ACC_SUPER      = JVM_ACC_SUPER
	CLASS_ACC_INTERFACE  = JVM_ACC_INTERFACE
	CLASS_ACC_ABSTRACT   = JVM_ACC_ABSTRACT
	CLASS_ACC_SYNTHETIC  = JVM_ACC_SYNTHETIC
	CLASS_ACC_ANNOTATION = JVM_ACC_ANNOTATION
	CLASS_ACC_ENUM       = JVM_ACC_ENUM
)

/* Used in newarray instruction. */

const (
	JVM_T_BOOLEAN = 4
	JVM_T_CHAR    = 5
	JVM_T_FLOAT   = 6
	JVM_T_DOUBLE  = 7
	JVM_T_BYTE    = 8
	JVM_T_SHORT   = 9
	JVM_T_INT     = 10
	JVM_T_LONG    = 11
)

/* Constant Pool Entries */

const (
	JVM_CONSTANT_Utf8               = 1
	JVM_CONSTANT_Unicode            = 2 /* unused */
	JVM_CONSTANT_Integer            = 3
	JVM_CONSTANT_Float              = 4
	JVM_CONSTANT_Long               = 5
	JVM_CONSTANT_Double             = 6
	JVM_CONSTANT_Class              = 7
	JVM_CONSTANT_String             = 8
	JVM_CONSTANT_Fieldref           = 9
	JVM_CONSTANT_Methodref          = 10
	JVM_CONSTANT_InterfaceMethodref = 11
	JVM_CONSTANT_NameAndType        = 12
	JVM_CONSTANT_MethodHandle       = 15 // JSR 292
	JVM_CONSTANT_MethodType         = 16 // JSR 292
	JVM_CONSTANT_InvokeDynamic      = 18
)

/* JVM_CONSTANT_MethodHandle subtypes */
const (
	JVM_REF_getField         = 1
	JVM_REF_getStatic        = 2
	JVM_REF_putField         = 3
	JVM_REF_putStatic        = 4
	JVM_REF_invokeVirtual    = 5
	JVM_REF_invokeStatic     = 6
	JVM_REF_invokeSpecial    = 7
	JVM_REF_newInvokeSpecial = 8
	JVM_REF_invokeInterface  = 9
)

/* StackMapTable type item numbers */

const (
	JVM_ITEM_Top               = 0
	JVM_ITEM_Integer           = 1
	JVM_ITEM_Float             = 2
	JVM_ITEM_Double            = 3
	JVM_ITEM_Long              = 4
	JVM_ITEM_Null              = 5
	JVM_ITEM_UninitializedThis = 6
	JVM_ITEM_Object            = 7
	JVM_ITEM_Uninitialized     = 8
)

/* Type signatures */

const (
	JVM_SIGNATURE_ARRAY    = "["
	JVM_SIGNATURE_BYTE     = "B"
	JVM_SIGNATURE_CHAR     = "C"
	JVM_SIGNATURE_CLASS    = "L"
	JVM_SIGNATURE_ENDCLASS = ";"
	JVM_SIGNATURE_ENUM     = "E"
	JVM_SIGNATURE_FLOAT    = "F"
	JVM_SIGNATURE_DOUBLE   = "D"
	JVM_SIGNATURE_FUNC     = "("
	JVM_SIGNATURE_ENDFUNC  = ")"
	JVM_SIGNATURE_INT      = "I"
	JVM_SIGNATURE_LONG     = "J"
	JVM_SIGNATURE_SHORT    = "S"
	JVM_SIGNATURE_VOID     = "V"
	JVM_SIGNATURE_BOOLEAN  = "Z"
)

/* Opcodes */

const (
	JVM_OPC_nop             = 0
	JVM_OPC_aconst_null     = 1
	JVM_OPC_iconst_m1       = 2
	JVM_OPC_iconst_0        = 3
	JVM_OPC_iconst_1        = 4
	JVM_OPC_iconst_2        = 5
	JVM_OPC_iconst_3        = 6
	JVM_OPC_iconst_4        = 7
	JVM_OPC_iconst_5        = 8
	JVM_OPC_lconst_0        = 9
	JVM_OPC_lconst_1        = 10
	JVM_OPC_fconst_0        = 11
	JVM_OPC_fconst_1        = 12
	JVM_OPC_fconst_2        = 13
	JVM_OPC_dconst_0        = 14
	JVM_OPC_dconst_1        = 15
	JVM_OPC_bipush          = 16
	JVM_OPC_sipush          = 17
	JVM_OPC_ldc             = 18
	JVM_OPC_ldc_w           = 19
	JVM_OPC_ldc2_w          = 20
	JVM_OPC_iload           = 21
	JVM_OPC_lload           = 22
	JVM_OPC_fload           = 23
	JVM_OPC_dload           = 24
	JVM_OPC_aload           = 25
	JVM_OPC_iload_0         = 26
	JVM_OPC_iload_1         = 27
	JVM_OPC_iload_2         = 28
	JVM_OPC_iload_3         = 29
	JVM_OPC_lload_0         = 30
	JVM_OPC_lload_1         = 31
	JVM_OPC_lload_2         = 32
	JVM_OPC_lload_3         = 33
	JVM_OPC_fload_0         = 34
	JVM_OPC_fload_1         = 35
	JVM_OPC_fload_2         = 36
	JVM_OPC_fload_3         = 37
	JVM_OPC_dload_0         = 38
	JVM_OPC_dload_1         = 39
	JVM_OPC_dload_2         = 40
	JVM_OPC_dload_3         = 41
	JVM_OPC_aload_0         = 42
	JVM_OPC_aload_1         = 43
	JVM_OPC_aload_2         = 44
	JVM_OPC_aload_3         = 45
	JVM_OPC_iaload          = 46
	JVM_OPC_laload          = 47
	JVM_OPC_faload          = 48
	JVM_OPC_daload          = 49
	JVM_OPC_aaload          = 50
	JVM_OPC_baload          = 51
	JVM_OPC_caload          = 52
	JVM_OPC_saload          = 53
	JVM_OPC_istore          = 54
	JVM_OPC_lstore          = 55
	JVM_OPC_fstore          = 56
	JVM_OPC_dstore          = 57
	JVM_OPC_astore          = 58
	JVM_OPC_istore_0        = 59
	JVM_OPC_istore_1        = 60
	JVM_OPC_istore_2        = 61
	JVM_OPC_istore_3        = 62
	JVM_OPC_lstore_0        = 63
	JVM_OPC_lstore_1        = 64
	JVM_OPC_lstore_2        = 65
	JVM_OPC_lstore_3        = 66
	JVM_OPC_fstore_0        = 67
	JVM_OPC_fstore_1        = 68
	JVM_OPC_fstore_2        = 69
	JVM_OPC_fstore_3        = 70
	JVM_OPC_dstore_0        = 71
	JVM_OPC_dstore_1        = 72
	JVM_OPC_dstore_2        = 73
	JVM_OPC_dstore_3        = 74
	JVM_OPC_astore_0        = 75
	JVM_OPC_astore_1        = 76
	JVM_OPC_astore_2        = 77
	JVM_OPC_astore_3        = 78
	JVM_OPC_iastore         = 79
	JVM_OPC_lastore         = 80
	JVM_OPC_fastore         = 81
	JVM_OPC_dastore         = 82
	JVM_OPC_aastore         = 83
	JVM_OPC_bastore         = 84
	JVM_OPC_castore         = 85
	JVM_OPC_sastore         = 86
	JVM_OPC_pop             = 87
	JVM_OPC_pop2            = 88
	JVM_OPC_dup             = 89
	JVM_OPC_dup_x1          = 90
	JVM_OPC_dup_x2          = 91
	JVM_OPC_dup2            = 92
	JVM_OPC_dup2_x1         = 93
	JVM_OPC_dup2_x2         = 94
	JVM_OPC_swap            = 95
	JVM_OPC_iadd            = 96
	JVM_OPC_ladd            = 97
	JVM_OPC_fadd            = 98
	JVM_OPC_dadd            = 99
	JVM_OPC_isub            = 100
	JVM_OPC_lsub            = 101
	JVM_OPC_fsub            = 102
	JVM_OPC_dsub            = 103
	JVM_OPC_imul            = 104
	JVM_OPC_lmul            = 105
	JVM_OPC_fmul            = 106
	JVM_OPC_dmul            = 107
	JVM_OPC_idiv            = 108
	JVM_OPC_ldiv            = 109
	JVM_OPC_fdiv            = 110
	JVM_OPC_ddiv            = 111
	JVM_OPC_irem            = 112
	JVM_OPC_lrem            = 113
	JVM_OPC_frem            = 114
	JVM_OPC_drem            = 115
	JVM_OPC_ineg            = 116
	JVM_OPC_lneg            = 117
	JVM_OPC_fneg            = 118
	JVM_OPC_dneg            = 119
	JVM_OPC_ishl            = 120
	JVM_OPC_lshl            = 121
	JVM_OPC_ishr            = 122
	JVM_OPC_lshr            = 123
	JVM_OPC_iushr           = 124
	JVM_OPC_lushr           = 125
	JVM_OPC_iand            = 126
	JVM_OPC_land            = 127
	JVM_OPC_ior             = 128
	JVM_OPC_lor             = 129
	JVM_OPC_ixor            = 130
	JVM_OPC_lxor            = 131
	JVM_OPC_iinc            = 132
	JVM_OPC_i2l             = 133
	JVM_OPC_i2f             = 134
	JVM_OPC_i2d             = 135
	JVM_OPC_l2i             = 136
	JVM_OPC_l2f             = 137
	JVM_OPC_l2d             = 138
	JVM_OPC_f2i             = 139
	JVM_OPC_f2l             = 140
	JVM_OPC_f2d             = 141
	JVM_OPC_d2i             = 142
	JVM_OPC_d2l             = 143
	JVM_OPC_d2f             = 144
	JVM_OPC_i2b             = 145
	JVM_OPC_i2c             = 146
	JVM_OPC_i2s             = 147
	JVM_OPC_lcmp            = 148
	JVM_OPC_fcmpl           = 149
	JVM_OPC_fcmpg           = 150
	JVM_OPC_dcmpl           = 151
	JVM_OPC_dcmpg           = 152
	JVM_OPC_ifeq            = 153
	JVM_OPC_ifne            = 154
	JVM_OPC_iflt            = 155
	JVM_OPC_ifge            = 156
	JVM_OPC_ifgt            = 157
	JVM_OPC_ifle            = 158
	JVM_OPC_if_icmpeq       = 159
	JVM_OPC_if_icmpne       = 160
	JVM_OPC_if_icmplt       = 161
	JVM_OPC_if_icmpge       = 162
	JVM_OPC_if_icmpgt       = 163
	JVM_OPC_if_icmple       = 164
	JVM_OPC_if_acmpeq       = 165
	JVM_OPC_if_acmpne       = 166
	JVM_OPC_goto            = 167
	JVM_OPC_jsr             = 168
	JVM_OPC_ret             = 169
	JVM_OPC_tableswitch     = 170
	JVM_OPC_lookupswitch    = 171
	JVM_OPC_ireturn         = 172
	JVM_OPC_lreturn         = 173
	JVM_OPC_freturn         = 174
	JVM_OPC_dreturn         = 175
	JVM_OPC_areturn         = 176
	JVM_OPC_return          = 177
	JVM_OPC_getstatic       = 178
	JVM_OPC_putstatic       = 179
	JVM_OPC_getfield        = 180
	JVM_OPC_putfield        = 181
	JVM_OPC_invokevirtual   = 182
	JVM_OPC_invokespecial   = 183
	JVM_OPC_invokestatic    = 184
	JVM_OPC_invokeinterface = 185
	JVM_OPC_invokedynamic   = 186
	JVM_OPC_new             = 187
	JVM_OPC_newarray        = 188
	JVM_OPC_anewarray       = 189
	JVM_OPC_arraylength     = 190
	JVM_OPC_athrow          = 191
	JVM_OPC_checkcast       = 192
	JVM_OPC_instanceof      = 193
	JVM_OPC_monitorenter    = 194
	JVM_OPC_monitorexit     = 195
	JVM_OPC_wide            = 196
	JVM_OPC_multianewarray  = 197
	JVM_OPC_ifnull          = 198
	JVM_OPC_ifnonnull       = 199
	JVM_OPC_goto_w          = 200
	JVM_OPC_jsr_w           = 201
	JVM_OPC_breakpoint      = 202
	JVM_OPC_MAX             = 202
)

/* Opcode length initializer use with something like:
 *   unsigned char opcode_length[JVM_OPC_MAX+1] = JVM_OPCODE_LENGTH_INITIALIZER;
 */
var JVM_OPCODE_LENGTH_INITIALIZER = [JVM_OPC_MAX + 1]int{
	1  /* nop */ ,
	1  /* aconst_null */ ,
	1  /* iconst_m1 */ ,
	1  /* iconst_0 */ ,
	1  /* iconst_1 */ ,
	1  /* iconst_2 */ ,
	1  /* iconst_3 */ ,
	1  /* iconst_4 */ ,
	1  /* iconst_5 */ ,
	1  /* lconst_0 */ ,
	1  /* lconst_1 */ ,
	1  /* fconst_0 */ ,
	1  /* fconst_1 */ ,
	1  /* fconst_2 */ ,
	1  /* dconst_0 */ ,
	1  /* dconst_1 */ ,
	2  /* bipush */ ,
	3  /* sipush */ ,
	2  /* ldc */ ,
	3  /* ldc_w */ ,
	3  /* ldc2_w */ ,
	2  /* iload */ ,
	2  /* lload */ ,
	2  /* fload */ ,
	2  /* dload */ ,
	2  /* aload */ ,
	1  /* iload_0 */ ,
	1  /* iload_1 */ ,
	1  /* iload_2 */ ,
	1  /* iload_3 */ ,
	1  /* lload_0 */ ,
	1  /* lload_1 */ ,
	1  /* lload_2 */ ,
	1  /* lload_3 */ ,
	1  /* fload_0 */ ,
	1  /* fload_1 */ ,
	1  /* fload_2 */ ,
	1  /* fload_3 */ ,
	1  /* dload_0 */ ,
	1  /* dload_1 */ ,
	1  /* dload_2 */ ,
	1  /* dload_3 */ ,
	1  /* aload_0 */ ,
	1  /* aload_1 */ ,
	1  /* aload_2 */ ,
	1  /* aload_3 */ ,
	1  /* iaload */ ,
	1  /* laload */ ,
	1  /* faload */ ,
	1  /* daload */ ,
	1  /* aaload */ ,
	1  /* baload */ ,
	1  /* caload */ ,
	1  /* saload */ ,
	2  /* istore */ ,
	2  /* lstore */ ,
	2  /* fstore */ ,
	2  /* dstore */ ,
	2  /* astore */ ,
	1  /* istore_0 */ ,
	1  /* istore_1 */ ,
	1  /* istore_2 */ ,
	1  /* istore_3 */ ,
	1  /* lstore_0 */ ,
	1  /* lstore_1 */ ,
	1  /* lstore_2 */ ,
	1  /* lstore_3 */ ,
	1  /* fstore_0 */ ,
	1  /* fstore_1 */ ,
	1  /* fstore_2 */ ,
	1  /* fstore_3 */ ,
	1  /* dstore_0 */ ,
	1  /* dstore_1 */ ,
	1  /* dstore_2 */ ,
	1  /* dstore_3 */ ,
	1  /* astore_0 */ ,
	1  /* astore_1 */ ,
	1  /* astore_2 */ ,
	1  /* astore_3 */ ,
	1  /* iastore */ ,
	1  /* lastore */ ,
	1  /* fastore */ ,
	1  /* dastore */ ,
	1  /* aastore */ ,
	1  /* bastore */ ,
	1  /* castore */ ,
	1  /* sastore */ ,
	1  /* pop */ ,
	1  /* pop2 */ ,
	1  /* dup */ ,
	1  /* dup_x1 */ ,
	1  /* dup_x2 */ ,
	1  /* dup2 */ ,
	1  /* dup2_x1 */ ,
	1  /* dup2_x2 */ ,
	1  /* swap */ ,
	1  /* iadd */ ,
	1  /* ladd */ ,
	1  /* fadd */ ,
	1  /* dadd */ ,
	1  /* isub */ ,
	1  /* lsub */ ,
	1  /* fsub */ ,
	1  /* dsub */ ,
	1  /* imul */ ,
	1  /* lmul */ ,
	1  /* fmul */ ,
	1  /* dmul */ ,
	1  /* idiv */ ,
	1  /* ldiv */ ,
	1  /* fdiv */ ,
	1  /* ddiv */ ,
	1  /* irem */ ,
	1  /* lrem */ ,
	1  /* frem */ ,
	1  /* drem */ ,
	1  /* ineg */ ,
	1  /* lneg */ ,
	1  /* fneg */ ,
	1  /* dneg */ ,
	1  /* ishl */ ,
	1  /* lshl */ ,
	1  /* ishr */ ,
	1  /* lshr */ ,
	1  /* iushr */ ,
	1  /* lushr */ ,
	1  /* iand */ ,
	1  /* land */ ,
	1  /* ior */ ,
	1  /* lor */ ,
	1  /* ixor */ ,
	1  /* lxor */ ,
	3  /* iinc */ ,
	1  /* i2l */ ,
	1  /* i2f */ ,
	1  /* i2d */ ,
	1  /* l2i */ ,
	1  /* l2f */ ,
	1  /* l2d */ ,
	1  /* f2i */ ,
	1  /* f2l */ ,
	1  /* f2d */ ,
	1  /* d2i */ ,
	1  /* d2l */ ,
	1  /* d2f */ ,
	1  /* i2b */ ,
	1  /* i2c */ ,
	1  /* i2s */ ,
	1  /* lcmp */ ,
	1  /* fcmpl */ ,
	1  /* fcmpg */ ,
	1  /* dcmpl */ ,
	1  /* dcmpg */ ,
	3  /* ifeq */ ,
	3  /* ifne */ ,
	3  /* iflt */ ,
	3  /* ifge */ ,
	3  /* ifgt */ ,
	3  /* ifle */ ,
	3  /* if_icmpeq */ ,
	3  /* if_icmpne */ ,
	3  /* if_icmplt */ ,
	3  /* if_icmpge */ ,
	3  /* if_icmpgt */ ,
	3  /* if_icmple */ ,
	3  /* if_acmpeq */ ,
	3  /* if_acmpne */ ,
	3  /* goto */ ,
	3  /* jsr */ ,
	2  /* ret */ ,
	99 /* tableswitch */ ,
	99 /* lookupswitch */ ,
	1  /* ireturn */ ,
	1  /* lreturn */ ,
	1  /* freturn */ ,
	1  /* dreturn */ ,
	1  /* areturn */ ,
	1  /* return */ ,
	3  /* getstatic */ ,
	3  /* putstatic */ ,
	3  /* getfield */ ,
	3  /* putfield */ ,
	3  /* invokevirtual */ ,
	3  /* invokespecial */ ,
	3  /* invokestatic */ ,
	5  /* invokeinterface */ ,
	5  /* invokedynamic */ ,
	3  /* new */ ,
	2  /* newarray */ ,
	3  /* anewarray */ ,
	1  /* arraylength */ ,
	1  /* athrow */ ,
	3  /* checkcast */ ,
	3  /* instanceof */ ,
	1  /* monitorenter */ ,
	1  /* monitorexit */ ,
	0  /* wide */ ,
	4  /* multianewarray */ ,
	3  /* ifnull */ ,
	3  /* ifnonnull */ ,
	5  /* goto_w */ ,
	5  /* jsr_w */ ,
}
